package com.atguigu.common.result;

import lombok.Data;

/**
 * ClassName: Result
 * Package: com.atguigu.common.result
 * Description: 返回数据接口封装
 *
 * @Author: lmf
 * @Create: 2024/1/16 13:33
 * @Version: 1.0
 */

@Data  // 生成get/set 方法
public class Result<T> {
    private Integer code; // 操作状态码
    private String message; // 提示信息
    private T Data; // 返回数据

    private Result() {

    }

    /**
     * @param body           返回数据
     * @param resultCodeEnum 返回code码
     * @param <T>            object
     * @return 封装返回前端数据
     */
    public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
        Result<T> result = new Result<>();
        if (body != null) {
            result.setData(body);
        }
        // 添加code码
        result.setCode(resultCodeEnum.getCode());
        // 添加提示信息
        result.setMessage(resultCodeEnum.getMessage());
        return result;
    }

    /**
     * 返回成功
     * @return  Result
     * @param <T> object
     */
    public static <T> Result<T>  ok(){
        return build(null, ResultCodeEnum.SUCCESS);
    }

    /**
     * @param data 返回成功带参数据
     * @return  Result
     * @param <T> object
     */
    public static <T> Result<T> ok(T data){
        return build(data, ResultCodeEnum.SUCCESS);
    }

    /**
     * 返回失败
     * @return  Result
     * @param <T> object
     */
    public static <T> Result<T> fail(){
        return build(null, ResultCodeEnum.FAIL);
    }

    /**
     * @param data 返回失败带参数据
     * @return  Result
     * @param <T> object
     */
    public static <T> Result<T> fail(T data){
        return build(data, ResultCodeEnum.FAIL);
    }

    /**
     * 设置消息
     * @param message 消息
     * @return this
     */
    public Result<T> message(String message){
        this.setMessage(message);
        return this;
    }

    /**
     * 设置code码
     * @param code code码
     * @return this
     */
    public  Result<T> code(Integer code){
        this.setCode(code);
        return this;
    }




}
